<!DOCTYPE html>
<html lang="zh-CN">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>learnRegExp</title>
</head>

<body>
	<script>
		// 表达式模式
		var str = 'luojianming123';
		var patt1 = /[luo]/g;
		var patt2 = /(luo)/g;
		var patt3 = /[0-9]/g;
		var patt4 = /[A-Z][0-9]/gi;
		var patt5 = /(luo)|(12)/gi;
		// 脱字符 ^
		var patt6 = /[^a-z]/g;
		console.log(str.replace(patt1, '罗'));
		console.log(str.replace(patt2, '罗'));
		console.log(str.replace(patt3, '罗'));
		console.log(str.replace(patt4, '罗'));
		console.log(str.replace(patt5, '罗'));
		console.log(str.replace(patt6, '罗'));

		// 匹配中文
		// var str = '我爱祖国';
		// var patt = /[祖][国]/g;
		// var patt = /祖国/g;
		// console.log(str.replace(patt, '中国'));

		// ***元字符模式***
		// \w 代表匹配字母数字下划线
		// \W 代表匹配除了字母数字下划线以外的字符
		// \d 代表匹配数字
		// \D 代表匹配除了数字以外的字符
		// \s 代表匹配空白
		// \S 代表匹配除了空白以外的字符
		// \b 代表匹配以某字符串开头或结尾的字符
		// \B 代表匹配除了以某字符串开头或结尾的字符
		// var str = 'luojianming 123,45445    fjl\
		// s3';
		// var patt = /\b45/g;
		// console.log(str.replace(patt, '罗'));

		// **量词模式**
		// n* 代表匹配0个或者多个n的字符串
		// n+ 代表匹配1个或者多个n的字符串
		// n? 代表匹配0个或者1个n的字符串
		// ^n 代表匹配开头为n的字符串
		// n$ 代表匹配结尾为n的字符串
		// n{x} 代表匹配出现x次n的字符串
		// n{x,} 代表匹配出现大于等于x次n的字符串
		// n{x,y} 代表匹配出现x到y次n的字符串
		var str = 'asdjs1daassss1aaaertr';
		var patt = /a{3}/g;
		console.log(str.replace(patt, '罗'));


		// 正则对象
		// exec()方法 匹配到返回数组，没匹配到返回null
		var res = patt.exec(str);
		console.log(res);
		// test() 方法 返回true或者false
		var result = patt.test(str);
		console.log(result);


		// 贪婪模式greed  * +
		var patt = /[a-z]*/g;
		console.log(patt.exec(str));
		console.log(str.match(patt));
		// 懒惰模式lazy ? *? +?
		var patt = /[a-z]?/g;
		console.log(patt.exec(str));
		console.log(str.match(patt));

		// 匹配特殊字符必须转义
		var patt = /\^/g;
		var patt = /\$/g;
		var patt = /\//g;
		var patt = /\\/g;
		var patt = /\./g;


		// 零宽断言(前瞻断言)
		var str = 'a123';
		// var patt = /(?<=ab)123/g;
		var patt = /(?<!ab)123/g;

		// 零宽断言(后瞻断言)
		// var patt = /123(?!ab)/g;
		// var patt = /123(?=ab)/g;
		console.log(str.match(patt));

		// 匹配年龄正则
		var patt = /^([0-9]{1}|[1-9][0-9]|1[0-9][0-9])$/g;
		var str = '0';
		console.log(str.match(patt));

		// \1为子匹配项，与前面匹配项相同
		var str = '11111134114423666';
		var res = str.match(/(\d)\1*/g);
		console.log(res);
	</script>

</body>

</html>